Various approaches have been proposed for improving the performance of client-server applications. Examples include U.S. Pat. No. 6,105,067 (Batra, Connection Pool Management for Backend Servers Using Common Interface, Aug. 15, 2000), U.S. Pat. No. 6,356,930 (Garg, Connection Concentrator for Distributed Object Systems, Mar. 12, 2002), and U.S. Pat. No. 5,553,242 (Russell, Client/Server Connection Sharing, Sep. 3, 1996). However, these patents addresses substantially different problems (such as limiting the number of connections to a client or server), and thus are significant different from the present invention. Other examples include an article by Kevin O'Malley, “Agents & Automated Online Trading: The TAC Game System Takes Care of Business,” Dr. Dobb's Journal, May 2001, an article by Torpum Jannak, “Java 2 Graphics Rendering: an Architecture for Extreme Animation,” Dr. Dobb's Journal, September 1999, and an article by John Calcote, “Thread Pools and Server Performance: Thread Pools Can Save CPU Cycles,” Dr. Dobb's Journal, July 1997. However, none of the above-mentioned patents or articles involve redundant servers, and none offer high-availability solutions.
In considering the performance of client-server applications, reliability and availability are very important in some environments. Where reliability and availability are important, it is preferable to avoid dependence on a single component such as a server. That single server could be a single point of failure, a point where a malfunction would disable a larger system. Thus there is a need for systems and methods that provide client-server applications with highly available services, where single points of failure are avoided.